LambdaでQRコードを生成してみた
LambdaでQRコードを生成し、S3バケットに保存してみました。
LambdaでQRコード生成を試してみました。
手軽に試したかったので、API Pathの任意の文字列をQRコード化し、S3バケットに画像として保存します。
※QRコードは(株)デンソーウェーブの登録商標です。
おすすめの方
- LambdaでQRコードを生成したい方
- LambdaでS3バケットにオブジェクトを保存したい方
QRコード生成アプリを作成する
SAM Init
sam init \ --runtime python3.8 \ --name QRCode-Sample \ --app-template hello-world \ --package-type Zip
SAMテンプレート
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: QRCode-Sample Resources: ImageBucket: DeletionPolicy: Retain Type: AWS::S3::Bucket Properties: BucketName: cm-fujii-genki-qrcode-bucket HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello_world/ Handler: app.lambda_handler Runtime: python3.8 Policies: - arn:aws:iam::aws:policy/AmazonS3FullAccess Environment: Variables: BUCKET_NAME: !Ref ImageBucket Events: HelloWorld: Type: Api Properties: Path: /qrcode/{text} Method: put HelloWorldFunctionLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub /aws/lambda/${HelloWorldFunction} Outputs: HelloWorldApi: Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/qrcode/{text}"
requirement.txt
2つのライブラリを使用します。
qrcode pillow
Lambdaコード
import json import qrcode import io import os import boto3 BUCKET_NAME = os.environ['BUCKET_NAME'] s3 = boto3.client('s3') def lambda_handler(event, context): text = event['pathParameters']['text'] output = io.BytesIO() image = qrcode.make(text) image.save(output) s3.put_object( Bucket=BUCKET_NAME, Key=f'{text}.png', Body=output.getvalue(), ) return { 'statusCode': 200, }
デプロイ
sam build --use-container
を使うことで、実際にLambdaで使えるライブラリを使用します。
sam build --use-container sam package \ --output-template-file packaged.yaml \ --s3-bucket cm-fujii.genki-deploy sam deploy \ --template-file packaged.yaml \ --stack-name QRcode-Sample-Stack \ --s3-bucket cm-fujii.genki-deploy \ --capabilities CAPABILITY_NAMED_IAM \ --no-fail-on-empty-changeset
APIエンドポイントの取得
aws cloudformation describe-stacks \ --stack-name QRcode-Sample-Stack \ --query 'Stacks[].Outputs'
動作確認
「xxx」でQRコードを生成する
curl -XPUT https://xxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/qrcode/xxx
生成された画像が下記です。
iPhoneのカメラで確認した様子です。
「this-is-a-pen」でQRコードを生成する
curl -XPUT https://xxxxx.execute-api.ap-northeast-1.amazonaws.com/Prod/qrcode/this-is-a-pen
生成された画像が下記です。
iPhoneのカメラで確認した様子です。